//app 模块，控制整个应用程序的事件生命周期。
//BrowserWindow 模块，它创建和管理程序的窗口。

const { app, BrowserWindow, Tray, Menu } = require('electron')
import * as path from 'path'

const iconPath = path.join(__dirname, './src/assets/x.jpg')
let mainWindow: any, tray: any

//在 Electron 中，只有在 app 模块的 ready 事件被激发后才能创建浏览器窗口
app.on('ready', () => {

  //创建一个窗口
  mainWindow = new BrowserWindow({
    // frame: false, // 去掉边框
    resizable: false,
    width: 800,
    height: 600,
    icon: iconPath,
    webPreferences: {
      backgroundThrottling: false, // 设置应用在后台正常运行
      nodeIntegration: true, // 设置在页面能使用 nodejs 的 API
      contextIsolation: false,
      preload: path.join(__dirname, 'preload.js')
    }
  })

  // mainWindow.removeMenu() // 去掉菜单栏

  //当有多个应用时，提醒窗口始终处于最上层
  // mainWindow.setAlwaysOnTop(true)

  //窗口加载html文件
  const isDev = process.env.NODE_ENV === 'development'
  if (isDev) {
    mainWindow.loadURL('http://localhost:3000')
  } else {
    mainWindow.loadFile(path.join(__dirname, '..', 'dist/index.html'))
    // mainWindow.loadURL(`file://${__dirname}/index.html`)
  }

  mainWindow.webContents.openDevTools();

  tray = new Tray(iconPath)      //实例化一个tray对象，构造函数的唯一参数是需要在托盘中显示的图标url
  tray.setToolTip('ele-demo')       //鼠标移到托盘中应用程序的图标上时，显示的文本
  tray.on('click', () => {       //点击图标的响应事件，这里是切换主窗口的显示和隐藏
    if(mainWindow.isVisible()){
      mainWindow.hide()
    }else{
      mainWindow.show()
    }
  })
  tray.on('right-click', () => {    //右键点击图标时，出现的菜单，通过Menu.buildFromTemplate定制，这里只包含退出程序的选项。
    const menuConfig = Menu.buildFromTemplate([
      {
        label: '退出',
        click: () => app.quit()
      }
    ])
    tray.popUpContextMenu(menuConfig)
  })

})